home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 2004 September (Deutsch) / macworld_09_04.iso / Shareware World / Data & Time / AddressBookToCSV-1.1.dmg / Source / Controller.m < prev    next >
Encoding:
Text File  |  2004-07-03  |  3.4 KB  |  105 lines

  1. //
  2. //  Controller.m
  3. //  AddressBookToCSV
  4. //
  5. //  Created by Ken Ferry on Thu Jun 17 2004.
  6. //  Copyright (c) 2004 Ken Ferry. All rights reserved.
  7. //
  8.  
  9. #import "Controller.h"
  10.  
  11. #import <AddressBook/AddressBook.h>
  12. #import "ABPerson+CSVExport.h"
  13. #import "ABMultiValue+CSVExport.h"
  14.  
  15. @implementation Controller
  16.  
  17. - (IBAction)exportAddressBook:(id)sender
  18. {
  19.     NSSavePanel *savePanel = [NSSavePanel savePanel]; // NSSavePanel is 10.3
  20.     
  21.     [savePanel beginSheetForDirectory:NSHomeDirectory()
  22.                                  file:@"contacts.csv"
  23.                        modalForWindow:[self window]
  24.                         modalDelegate:self
  25.                        didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) 
  26.                           contextInfo:nil];
  27. }
  28.  
  29. - (void)savePanelDidEnd:(NSSavePanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
  30. {
  31.     if (returnCode == NSOKButton)
  32.     {
  33.         [self exportAddressBookToFile:[sheet filename]];
  34.     }
  35. }
  36.  
  37.  
  38. - (BOOL)exportAddressBookToFile:(NSString *)path
  39. {
  40.     NSData *csvDatabase = [self csvFormatAddressBook];
  41.     
  42.     return [csvDatabase writeToFile:path atomically:YES];
  43. }
  44.  
  45. - (NSData *)csvFormatAddressBook
  46. {
  47.     NSEnumerator *allPeopleEnumerator = [[[ABAddressBook sharedAddressBook] people] objectEnumerator];
  48.     return [self csvFormatDatabaseForPersonEnumerator:allPeopleEnumerator];
  49. }
  50.  
  51. // testing only
  52. - (NSData *)csvFormatDatabaseForTestGroup
  53. {
  54.     ABSearchElement *encodeTestSearchEl;
  55.     ABGroup *encodeTestGroup;
  56.     
  57.     encodeTestSearchEl = [ABGroup searchElementForProperty:kABGroupNameProperty
  58.                                                      label:nil 
  59.                                                        key:nil 
  60.                                                      value:@"Encode Test Group" 
  61.                                                 comparison:kABEqual];
  62.     
  63.     encodeTestGroup = [[[ABAddressBook sharedAddressBook] recordsMatchingSearchElement:encodeTestSearchEl] objectAtIndex:0];
  64.     NSEnumerator *testPeopleEnumerator = [[encodeTestGroup members] objectEnumerator];
  65.     
  66.     return [self csvFormatDatabaseForPersonEnumerator:testPeopleEnumerator];
  67. }
  68.  
  69. - (NSData *)csvFormatDatabaseForPersonEnumerator:(NSEnumerator *)personEnumerator
  70. {
  71.     NSMutableString *csvString;
  72.     NSEnumerator *emailEnumerator;
  73.     ABPerson *person;
  74.     NSString *email;
  75.     
  76.     csvString = [NSMutableString stringWithString:@"Name,E-mail Address\n"];
  77.  
  78.     while (person = [personEnumerator nextObject])
  79.     {        
  80.         BOOL isCompany = [person isCompany];
  81.         emailEnumerator = [[[person valueForProperty:kABEmailProperty] allValues] objectEnumerator];
  82.         
  83.         while (email = [emailEnumerator nextObject])
  84.         {
  85.             if (isCompany)
  86.             {
  87.                 [csvString appendString:[NSString stringWithFormat:@"%@,%@\n", [person companyName], email]];
  88.             }
  89.             else
  90.             {
  91.                 [csvString appendString:[NSString stringWithFormat:@"%@,%@\n", [person fullName], email]];
  92.             }
  93.         }
  94.     }
  95.     
  96.     [csvString replaceOccurrencesOfString:@"(null)" 
  97.                                withString:@"" 
  98.                                   options:NSLiteralSearch 
  99.                                     range:NSMakeRange(0, [csvString length])]; 
  100.     
  101.     return [csvString dataUsingEncoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingISOLatin1) allowLossyConversion:YES];
  102. }
  103.  
  104. @end
  105.